import { login, getUserInfo, getUserDetailById } from '@/api/user'
// 引入cookies
import { getToken, setToken, removeToken } from '@/utils/auth'
import { resetRouter } from '@/router'
// 数据持久化还有另外一种写法 cookies， 在这里作者已经封装好了并且引入第三方库方便使用
// 定义全局变量保存 token
// const tokenKey = 'myToken'
const state = {
  // 设置token的共享状态
  // token: ''
  // 数据持久化
  // token: localStorage.getItem(tokenKey) || ''
  // cookies 写法
  token: getToken() || '',
  userInfo: {}
}
const mutations = {
  // 提供修改token的mutations
  setToken(state, data) {
    state.token = data
    // 进行数据持久化的设置
    // localStorage.setItem('hr_token',data)
    // localStorage.setItem(tokenKey, data)
    // cookies 写法
    setToken(data)
  },
  setUserInfo(store, data) {
    store.userInfo = data
  },
  // 登出逻辑
  removeToken(state) {
    // 登出了把token清空
    state.token = ''
    // 清理已经存在本地的cookies
    removeToken()
  },
  removeUserInfo(state) {
    // 把用户信息也清空
    state.userInfo = {}
  }
}
const actions = {
  // 封装登录的action ,要注意一个点，异步请求只能放在actions但是actions也可以处理同步请求。
  async login(store, data) {
    // 截取数据，方便进行错误数据处理
    const res = await login(data)
    // console.log(res)
    // store.commit('setToken', res.data.data)
    // 这里直接拿到经过再次解构的data，res就相当于res.data。data所以存token直接给res即可
    // 发送完请求利用 mutation 存 state
    store.commit('setToken', res)
    // 主动介入token失效，需要记录登陆成功时间戳
    localStorage.setItem('loginTime', Date.now())
  },
  // 封装获取用户信息的请求
  async getUserInfo(store) {
    // res就是用户的基本资料
    const res = await getUserInfo()
    const data = await getUserDetailById(res.userId) // 为了获取头像
    // console.log(res)
    store.commit('setUserInfo', res)
    // 将两个接口结果合并
    store.commit('setUserInfo', {
      ...res,
      ...data,
      staffPhoto: null
    })
  },
  // 封装用户登出功能
  logout(store) {
    store.commit('removeToken')
    store.commit('removeUserInfo')
    resetRouter()
  }
}
export default {
  namespaced: true,
  state,
  mutations,
  actions
}
